package tcp;

import java.io.IOException;
import java.net.Socket;

/**
 * 多线程TCP回显服务器
 * 功能：为每个客户端连接创建独立线程进行处理，支持并发连接
 * 继承自TCPEchoServer，重用其连接处理逻辑
 */
public class TCPThreadServer extends TCPEchoServer {
    /**
     * 构造方法
     * @param port 服务端的端口号
     */
    public TCPThreadServer(int port) throws IOException {
        // 调用父类构造方法，初始化服务器Socket
        super(port);
    }

    /**
     * 重写start方法，实现多线程处理客户端连接
     * @throws IOException 如果接受客户端连接失败
     */
    @Override
    public void start() throws IOException {
        System.out.println("服务器已启动，等待客户端连接.");
        // 循环接收客户端的连接请求
        while (true) {
            // 接收客户端的连接
            Socket clientSocket = socket.accept();
            // 为每个客户端连接创建新线程
            Thread thread = new Thread(() -> {
                // 在子线程中处理客户端连接
                processConnections(clientSocket);
            });
            // 启动线程，申请操作系统的PCB，操作系统会分配资源并调度执行
            thread.start();
            // 注意：此处没有限制线程数量，实际应用中应考虑使用线程池
        }
    }

    public static void main(String[] args) throws IOException {
        // 创建多线程服务器实例，监听9999端口
        TCPThreadServer server = new TCPThreadServer(9999);
        // 启动服务器
        server.start();
    }
}
